/******************************************************************************
 * 文件名称: SID31_RoutineControl.c
 * 内容摘要: 例程控制
 * 创建者の: 孔佳伟
 * 个人主页: https://gitee.com/thin-wind/jump
 * 修改记录:
 ******************************************************************************/

#include "SID31_RoutineControl.h"

#include "service_cfg.h"
#include "uds_service.h"
#include "user_sid31_service.h"
#include "user_uds.h"

/*
 * 31 01 ff 00 擦除内存
 * 31 01 02 02 检查传输数据完整性
 * 31 01 02 03 更新条件查询
 * 31 01 ff 01 软硬件一致性检查
 * 31 01 df e0 从节点模式选择
 * 31 01 02 04 数字签名
 */

typedef enum __UDS_ROUTINE_CTRL_TYPE__
{
    UDS_ROUTINE_CTRL_NONE           = 0,
    UDS_ROUTINE_CTRL_START          = 0x01,
    UDS_ROUTINE_CTRL_STOP           = 0x02,
    UDS_ROUTINE_CTRL_REQUEST_RESULT = 0x03
} uds_routine_ctrl_type;

/******************************************************************************
 * 函数名称: bool_t service_31_check_len(const uint8_t* msg_buf, uint16_t msg_dlc)
 * 功能说明: 检查 31 服务数据长度是否合法
 * 输入参数: uint16_t msg_dlc         --数据长度
 * 输出参数: 无
 * 函数返回: TRUE: 合法; FALSE: 非法
 * 其它说明: 无
 ******************************************************************************/
bool_t service_31_check_len(const uint8_t *msg_buf, uint16_t msg_dlc)
{
    bool_t ret = FALSE;

    (void)msg_buf;
    if (msg_dlc > 4) ret = TRUE;

    return ret;
}

/******************************************************************************
* 函数名称: void service_31_RoutineControl(const uint8_t* msg_buf, uint16_t msg_dlc)
* 功能说明: 31 服务 - 例程控制
* 输入参数: uint8_t*    msg_buf         --数据首地址
    　　　　uint8_t     msg_dlc         --数据长度
* 输出参数: 无
* 函数返回: 无
* 其它说明: 无
******************************************************************************/
void service_31_RoutineControl(const uint8_t *msg_buf, uint16_t msg_dlc)
{

    uint8_t rsp_buf[20];
    int16_t ret_val;

    ret_val = Routine_Control_Port((uint8_t *)msg_buf, rsp_buf, msg_dlc);

    if (ret_val >= 0) {
        uds_positive_rsp(rsp_buf, ret_val);
    }
    else {
        uds_negative_rsp(SID_31, -ret_val);
    }
}

/****************EOF****************/
